package com.controller;


import com.service.UserService;
import com.utils.JWTUtil;
import com.utils.JsonData;
import io.jsonwebtoken.Claims;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;

/**
 * 实现登陆，注销，注册，获取登陆后的个人信息逻辑
 */
@RestController
@RequestMapping("api/v1/pri/user")
public class UserController {

    @Autowired
    private UserService userService;



    /**
     * 登陆功能
     * @param phone 登陆账号
     * @param pwd 登陆密码
     * @return 成功返回token，失败返回提示信息
     */
    @PostMapping("/login")
    public JsonData loginSumit(String phone, String pwd){
        String token=userService.login(phone,pwd);
        if(token!=null) {
            return JsonData.buildSuccess(token);
        }else {
            return JsonData.buildError("用户或密码错误");
        }
    }


    /**
     * 注册新用户功能
     * @param infoMap 新用户信息
     * @return 是否成功注册
     */
    @RequestMapping("/register")
    public JsonData register(@RequestParam Map<String,String> infoMap){
        boolean tag=userService.register(infoMap);
        return tag?JsonData.buildSuccess():JsonData.buildError("注册失败，请重试");

    }

    /**
     * 难题：如何实现基于JWT实现token方式时，
     * 在注销功能开发时又不在服务端数据库或redis实现呢？
     * @return
     */
    @RequestMapping("/logout")
    public JsonData logout(){

        return JsonData.buildError("没实现功能");
    }

    /**
     * 获取登陆后用户的信息:账号，名称，头像，id
     *
     * @param request 从请求header获取token
     * @return
     */
    @GetMapping("getMessage")
    public JsonData getUserInfoByToken(HttpServletRequest request){
        try {
            String token = request.getHeader("token");
            //通过拦截处理，不登录或者token有期无法进入该请求
            Claims claims = JWTUtil.checkJWT(token);

            Map<String, Object> map = new HashMap<>();
            map.put("账号", (String) claims.get("phone"));
            map.put("头像", (String) claims.get("head_img"));
            map.put("id", (Integer) claims.get("id"));
            map.put("name", (String) claims.get("name"));
            return JsonData.buildSuccess(map);

        }catch (Exception e){
            return JsonData.buildError("获取个人信息有误，请重新登录");
        }
    }



}
